ioemu: handle empty vnc passwd
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 23 Jan 2008 18:12:37 +0000 (18:12 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 23 Jan 2008 18:12:37 +0000 (18:12 +0000)
Have xenstore_read_vncpasswd return -1 when it is unable to read the
passwd from XenStore (and store an empty password).  However, don't
exit in such case since it may just mean that the use didn't set a
passwd. If he really did, xend would have given the passwd flag in the
-vnc option, and the empty passwd would make the vnc authentication
reject any password anyway.

Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Acked-by: Daniel P. Berrange <berrange@redhat.com>
tools/ioemu/vl.c
tools/ioemu/vl.h
tools/ioemu/xenstore.c

index bb12a3fd99610de84c807f14c928f2a4e31985c3..939149c46f11ea7db4a3336fff6a194a065a45a5 100644 (file)
@@ -7756,8 +7756,7 @@ int main(int argc, char **argv)
        int vnc_display_port;
        char password[20];
        vnc_display_init(ds);
-       if (xenstore_read_vncpasswd(domid, password, sizeof(password)) < 0)
-           exit(0);
+       xenstore_read_vncpasswd(domid, password, sizeof(password));
        vnc_display_password(ds, password);
        if ((vnc_display_port = vnc_display_open(ds, vnc_display, vncunused)) < 0) 
            exit (0);
index 7b6c3febc7b54df9e836a7e7aace687403b40d69..9d78cd25d9f59e91d5b3b3fdcc76b4b282d4bb65 100644 (file)
@@ -1463,7 +1463,7 @@ void xenstore_process_event(void *opaque);
 void xenstore_record_dm_state(char *state);
 void xenstore_check_new_media_present(int timeout);
 void xenstore_write_vncport(int vnc_display);
-int xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen);
+void xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen);
 
 int xenstore_domain_has_devtype(struct xs_handle *handle,
                                 const char *devtype);
index 88466139edba41601f86da7232c1690487fb1a4f..b02f6bea07a2d9f24785b54044ea829f354fc887 100644 (file)
@@ -489,19 +489,20 @@ void xenstore_write_vncport(int display)
     free(buf);
 }
 
-int xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen)
+void xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen)
 {
     char *buf = NULL, *path, *uuid = NULL, *passwd = NULL;
     unsigned int i, len, rc = 0;
 
-    if (xsh == NULL) {
-        return -1;
-    }
+    pwbuf[0] = '\0';
+
+    if (xsh == NULL)
+        return;
 
     path = xs_get_domain_path(xsh, domid);
     if (path == NULL) {
         fprintf(logfile, "xs_get_domain_path() error. domid %d.\n", domid);
-        return -1;
+        return;
     }
 
     pasprintf(&buf, "%s/vm", path);
@@ -509,35 +510,29 @@ int xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen)
     if (uuid == NULL) {
         fprintf(logfile, "xs_read(): uuid get error. %s.\n", buf);
         free(path);
-        return -1;
+        return;
     }
 
     pasprintf(&buf, "%s/vncpasswd", uuid);
     passwd = xs_read(xsh, XBT_NULL, buf, &len);
     if (passwd == NULL) {
         fprintf(logfile, "xs_read(): vncpasswd get error. %s.\n", buf);
-        pwbuf[0] = '\0';
         free(uuid);
         free(path);
-        return rc;
+        return;
     }
 
-    for (i=0; i<len && i<pwbuflen; i++) {
+    for (i=0; i<len && i<pwbuflen; i++)
         pwbuf[i] = passwd[i];
-    }
     pwbuf[len < (pwbuflen-1) ? len : (pwbuflen-1)] = '\0';
     passwd[0] = '\0';
     pasprintf(&buf, "%s/vncpasswd", uuid);
-    if (xs_write(xsh, XBT_NULL, buf, passwd, len) == 0) {
+    if (xs_write(xsh, XBT_NULL, buf, passwd, len) == 0)
         fprintf(logfile, "xs_write() vncpasswd failed.\n");
-        rc = -1;
-    }
 
     free(passwd);
     free(uuid);
     free(path);
-
-    return rc;
 }